{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "# Deming Regression\n",
    "-------------------------------\n",
    "\n",
    "This function shows how to use TensorFlow to solve linear Deming regression.\n",
    "\n",
    "$y = Ax + b$\n",
    "\n",
    "We will use the iris data, specifically:\n",
    "\n",
    "y = Sepal Length and x = Petal Width.\n",
    "\n",
    "Demming regression is also called total least squares, in which we minimize the shortest distance from the predicted line and the actual (x,y) points.\n",
    "\n",
    "If least squares linear regression minimizes the vertical distance to the line, Deming regression minimizes the total distance to the line.  This type of regression minimizes the error in the y values and the x values.  See the below figure for a comparison.\n",
    "\n",
    "<img src=\"../images/05_demming_vs_linear_reg.png\" width=\"512\">\n",
    "\n",
    "To implement this in TensorFlow, we start by loading the necessary libraries."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from sklearn import datasets\n",
    "from tensorflow.python.framework import ops\n",
    "ops.reset_default_graph()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Start a computational graph session:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "sess = tf.Session()\n",
    "\n",
    "# Set a random seed\n",
    "tf.set_random_seed(42)\n",
    "np.random.seed(42)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "We load the iris data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "# Load the data\n",
    "# iris.data = [(Sepal Length, Sepal Width, Petal Length, Petal Width)]\n",
    "iris = datasets.load_iris()\n",
    "x_vals = np.array([x[3] for x in iris.data]) # Petal Width\n",
    "y_vals = np.array([y[0] for y in iris.data]) # Sepal Length"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Next we declare the batch size, model placeholders, model variables, and model operations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "# Declare batch size\n",
    "batch_size = 125\n",
    "\n",
    "# Initialize placeholders\n",
    "x_data = tf.placeholder(shape=[None, 1], dtype=tf.float32)\n",
    "y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)\n",
    "\n",
    "# Create variables for linear regression\n",
    "A = tf.Variable(tf.random_normal(shape=[1,1]))\n",
    "b = tf.Variable(tf.random_normal(shape=[1,1]))\n",
    "\n",
    "# Declare model operations\n",
    "model_output = tf.add(tf.matmul(x_data, A), b)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "For the demming loss, we want to compute:\n",
    "\n",
    "$$ \\frac{\\left| A \\cdot x + b - y \\right|}{\\sqrt{A^{2} + 1}} $$\n",
    "\n",
    "Which will give us the shortest distance between a point (x,y) and the predicted line, $A \\cdot x + b$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "# Declare Demming loss function\n",
    "demming_numerator = tf.abs(tf.subtract(tf.add(tf.matmul(x_data, A), b), y_target))\n",
    "demming_denominator = tf.sqrt(tf.add(tf.square(A),1))\n",
    "loss = tf.reduce_mean(tf.truediv(demming_numerator, demming_denominator))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Next we declare the optimization function and initialize all model variables."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "# Declare optimizer\n",
    "my_opt = tf.train.GradientDescentOptimizer(0.25)\n",
    "train_step = my_opt.minimize(loss)\n",
    "\n",
    "# Initialize variables\n",
    "init = tf.global_variables_initializer()\n",
    "sess.run(init)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Now we train our Demming regression for 250 iterations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Step #100 A = [[ 2.58974528]] b = [[ 2.42373133]]\n",
      "Loss = 0.463728\n",
      "Step #200 A = [[ 1.90922964]] b = [[ 3.4154501]]\n",
      "Loss = 0.322642\n",
      "Step #300 A = [[ 1.06098878]] b = [[ 4.56453991]]\n",
      "Loss = 0.273856\n",
      "Step #400 A = [[ 1.00083017]] b = [[ 4.59388161]]\n",
      "Loss = 0.298976\n",
      "Step #500 A = [[ 1.0299443]] b = [[ 4.59952974]]\n",
      "Loss = 0.26923\n",
      "Step #600 A = [[ 1.06056559]] b = [[ 4.62580824]]\n",
      "Loss = 0.249916\n",
      "Step #700 A = [[ 1.02942014]] b = [[ 4.62580299]]\n",
      "Loss = 0.268684\n",
      "Step #800 A = [[ 0.97553492]] b = [[ 4.58289957]]\n",
      "Loss = 0.299307\n",
      "Step #900 A = [[ 1.01650584]] b = [[ 4.6252861]]\n",
      "Loss = 0.26287\n",
      "Step #1000 A = [[ 0.98668981]] b = [[ 4.63828659]]\n",
      "Loss = 0.294549\n",
      "Step #1100 A = [[ 1.01067007]] b = [[ 4.60674715]]\n",
      "Loss = 0.254099\n",
      "Step #1200 A = [[ 1.02380884]] b = [[ 4.55823612]]\n",
      "Loss = 0.293523\n",
      "Step #1300 A = [[ 1.01040077]] b = [[ 4.59357595]]\n",
      "Loss = 0.2805\n",
      "Step #1400 A = [[ 0.94558841]] b = [[ 4.57222986]]\n",
      "Loss = 0.266987\n",
      "Step #1500 A = [[ 0.98734832]] b = [[ 4.64195204]]\n",
      "Loss = 0.264831\n"
     ]
    }
   ],
   "source": [
    "# Training loop\n",
    "loss_vec = []\n",
    "for i in range(1500):\n",
    "    rand_index = np.random.choice(len(x_vals), size=batch_size)\n",
    "    rand_x = np.transpose([x_vals[rand_index]])\n",
    "    rand_y = np.transpose([y_vals[rand_index]])\n",
    "    sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "    temp_loss = sess.run(loss, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "    loss_vec.append(temp_loss)\n",
    "    if (i+1)%100==0:\n",
    "        print('Step #' + str(i+1) + ' A = ' + str(sess.run(A)) + ' b = ' + str(sess.run(b)))\n",
    "        print('Loss = ' + str(temp_loss))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Retrieve the optimal coefficients (slope and intercept)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "# Get the optimal coefficients\n",
    "[slope] = sess.run(A)\n",
    "[y_intercept] = sess.run(b)\n",
    "\n",
    "# Get best fit line\n",
    "best_fit = []\n",
    "for i in x_vals:\n",
    "  best_fit.append(slope*i+y_intercept)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Here is matplotlib code to plot the best fit Demming regression line and the Demming Loss."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nzQ/OzXnzzTfZvHkzK1euZPjw4fzxj3/k0ksvjSq/qsb8AhURPvnkE7Zs2cK0adP4+9//zpNPPum7\nPMNIVeLxP5vIumbOfJcuXc4hP/9iunQ5h5kz302YfHEh2YGk6hFwSr2IdHz58hXatevvFbYpqMI2\n7dr197p8+QrP9PHOX0lRUZFOmzat2rH3339fs7KydNGiRaqq+uabb+rhhx+ueXl52rlzZy0pKdmb\ntnPnzpqVlaUtWrTQ3NxcnTNnji5btkyPP/54bdOmjbZt21b79++vmzdvjiiDiOiyZcv2/j733HN1\n2LBhqqq6ePFiLS4u1vz8fD3kkEN0ypQpe9MNGjRIR4wYoaqqpaWl2qlTJ73//vt1v/320w4dOui4\nceNUVfWJJ57Qxo0b6z777KO5ubl6+umnq6rqvffeqx07dtTc3Fw96KCDdPr06Z7yRbqHhlEf4vU/\nm6i6ZsyYrdnZA6vlyc4eqDNmzI67fKG4/1/+3rt+Mwa91VdB9O9fEnIjdO8N6d+/xDN9vPNX4qUg\nVJ0X/2OPPaaqqjNmzNCFCxeqquqCBQu0ffv2+tprr6mq6ooVKzQrK0srKir25l26dKm+8847umvX\nLv3mm2+0V69eev3110eUIVRBLFq0SNu3b6/jxo3TXbt26f7776/33nuv7tq1S6dPn665ubm6ZMkS\nVa2pILKzs7WkpER3796tb731ljZv3lzLy8trpFVV/fzzz7WgoEDXrVunqqorV67U5cuXe8pnCsKI\nB/H6n01UXUVFZ3vmKSo6O+7yhRKLgsjYIabq0+4riX7afaz566JDhw5s2uQsmtezZ08OPvhgAA45\n5BDOP/98ZsyYUS29c58dunbtygknnEB2djZt2rTh+uuvr5E+nCOOOII2bdpwxhlncPnllzNo0CDm\nzJnD9u3bueWWW8jOzqZ3796ceuqpTJo0ybOMJk2aMGLECBo1akTfvn1p0aIFn3/+uWfaRo0asXPn\nThYuXMju3bvp3LkzXbp0ibp9DKO+JPp/Nta6vv02xzNPeXn4sdQh7UNtRCLWafeJnra/Zs0aWrdu\nDcDcuXO59dZbWbhwITt37mTnzp2ce+65EfNu2LCBa6+9llmzZrFt2zb27Nmzt6xIzJ8/v8YLeu3a\ntRQUFFQ7VlhYyJo1azzLaNOmTTVDefPmzdm2bZtn2q5du/Lggw9SUlLC4sWLOfnkk7n//vv50Y9+\n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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc61ad25710>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nRe0obrnlFpo3b86IESPo06cPAI0bN45LCPvtt1/aNrp168ZLL71UpX8utdfcVBMmTMhaOhERKbSS\nkhJKSkri8ersAqnQl6RGAe3MrLWZbQecDwyKZrr7Knff3d3buvu+BDe9f5wtWUBQyykzWUBwQKL7\nGlG/UjvttBMADz/8MN///veBoITx3e9+F4Bjjz0WgJEjRwLEJY+qiBoCRqJLZtFfdT0iIluTgiYM\ndy8DrgGGAJOAF919ipndY2ZnZFuFPJek8mnQICgs1atXD3dP66AwujndsGFDzjnnHODb/qRatWpF\n7969ueOOOwC48sorefrppxPt88477+Tss8+Ox6OuRx599NHN+RdERGq1gnc+6O5vAt/LmNYzx7Jd\nN3c/UcLIpkePHpx33nk0bNiQHj16cOyxx8Zn//Xr1+e6666Ll23Tpg0/+tGPAGjatGl8/yObuXPn\nMnfu3Hh81qxZtGrViqFDh+ZdJ0kVYBGR2qZO9labTb6E0a1bNxYsWMBee+3FLrvswhlnBIWbAQMG\nVHi2hpmxxx57MHnyZNq0acPq1asrLHP00UfzwQcfVNjPwQcfXGHaaaedRrdu3bjsssuYM2cObdu2\nTauOKyJSV2w1CePqq69mjz32yDk/W6vws86q2CQkKnl06NABgO233z6eN2LECDZu3EjTpk35wQ9+\nkCiuN998k/r163PZZZexfv36ROuIiNRGW03C+MEPfpD4RzyffDeqo+7Vx44dCwTtPJJ0e57a0FBE\npK6qU50P1oSodlWmyy+/PH7dqVMn3nnnHa6//vp4Wr6qaw0aNGDTpk18/PHHQP4uTkREaqutpoRR\nHSZPnkz79u2zzkstedSrV4+uXbsyatSoeFrUgDCb/v378/777/PFF0ETlIULF7LXXntVU9QiUpsN\nHjyY1atXc+655xY7lC2mEkaKDh065Lx5nu1SVepN7tSecF988cUKy0bJInNZEdm6XXDBBXTr1q3Y\nYVQLJYwEWrVqRdeuFWv8Rt2QHHTQQXGDQIDzzjuvxmKT2mPBggWsXLmy2GFILZOvBmddo4SRwLx5\n8/ImATNLq02VRFlZGXfffXdayUMqd//998ddvdQ2++yzj04WpILURsR1nRJGNVqzZg3vv/8+AN27\nd8+77BVXXMG9995Ly5YtKSsr49xzz+Whhx6qiTA327p16yo8H6Sm3XbbbfEz2avLrFmzqq0iQk30\nIVaIUszXX39d7dusjLvzq1/9qiDbHj16dM4KLNm6ASovL0/ribo6bU0JA3evE0MQau0D+MEHH5xz\n/ve+9z0n6PKk0uHQQw+N15s0aZKXlZW5u/uMGTP8vvvuq7aY582b52effXaF6StWrMi73oABAxzw\n8vJy37RpU7XFk0tZWZmXlpamTQN8u+22q9b9AN6/f/+8y6xduzbv/Dlz5jjgRxxxhLu7T5482cvL\ny/Ou89VXX/miRYvi8fLy8gr/b6YVK1Y44B9//HHa9LKyMv/ss8/yrpvLRx995Pm+X5V9LjbX2rVr\n489TdXv22Wez/k9jx47NOr13797x9LZt21bL5/vmm2/2uXPneqtWrRzwadOm+cKFC33p0qXu7j53\n7tx42YkTJ27x/nIJ/6/q+R2urg0VeqitCWPkyJE+c+bMnPNnzpzpo0eP9vLy8koTRoMGDXzatGnu\nHrzJr776qru733rrrXm/0EmUl5f78OHD3d39vPPOq7C99957L572xhtvxF+YPn36eMeOHd3d/a23\n3nLAn3rqqbQvenl5uX/44Yd59//ee+95eXm5r1+/3keOHJko5tSYIoDXr1+/0nV79uzpN9xwQ6L9\nAN6mTRufM2dO1vnr16/PefwHDhzov//97+P38Kijjoq3Wdkx6dixo++www7++eef+0cffeTTpk2r\n9H2O9vP666+nTX/77bfjdSdOnOjjx4+vsO6iRYt81qxZFaa//vrrDvjy5csrzIs+t0OHDs0bVz4X\nXHCBX3zxxV5eXu7z5s2Lp69cudIBnzp1qr/xxhubvf1Nmzb5hg0b0qa99NJLDvjnn3+eNv3VV1/N\neoz/93//1wEvKytzwL/++uvNjicCeO/evb1t27YVvutR4nryySf9008/3eLvd2VxuBJG3ZO0pDF9\n+nQHvG/fvu7ufttttzngd911lx9wwAFp29y4cWNacqls36tXr45f33333f7NN9+4e/oXCfAhQ4ak\nrde/f38/7bTTHPCbb77ZAb/iiivc3eMPPOADBgxISyT33Xefjxo1ygGfOXOmP/zww2lfjk6dOvmX\nX36ZFmtpaan369fP33333awJw8zSpo0aNcrfeeedtGk77LBDzi/h4Ycf7tdee603adLEFy5cGMf+\npz/9Kevyy5cvdyA+VsOHD49Lf5nvXZcuXdKm5/Liiy/6dttt54CfcMIJDvgnn3wSr7d+/fq05aME\nHs1/7bXX4mX++9//xtM3bdrkO+64owNpySF12+7u7du3jxNklDAOOuigCnEOHTrUAW/Xrp1/8cUX\nXl5e7kNyoFzdAAAVxElEQVSHDvUjjjjC//nPf/qSJUv8z3/+c9o6ZWVl/sILL8SvAW/UqJH369fP\ngbjEEh37Fi1axKWmUaNG+SuvvOLuQULp3r17fMKSafHixb5s2TLv1q2bt23b1t3d+/Xr561atfL/\n/Oc/8f87cODAtOOe7X25/PLLHfA1a9Y44MuWLcu6z5/85Cf+yCOPZJ2XKUoI7du3r/A5ee211+LX\n77//vhJGdQ9bQ8JwT5Y0og97r169fNmyZf6b3/zGIbjcAfiUKVPi7UWXiW677TZ3d1+3bp3fdddd\nvmDBgniZNm3axNu+77770vY1b948X7lypf/2t7+tkDCWLl0aL5d6aS06G4vOyF5++eW0bb7wwgt+\n9tlnV/i/Jk6c6LfccosDPn/+/HhfH3zwQdoxiuIdPnx4HNPq1at9/Pjxads7/vjj/c477/QuXbrE\ny61Zs8b/8pe/xMssWbLEgfgyQLTPli1bxvtO3Wb9+vX91ltvjb/EY8eO9UmTJsU/JtH6w4YNi38M\nU4fdd9/d58+fnzdhZK7XpEkTB+ISHOBjxozxtm3b+sUXXxxPixIXEJc6N27c6N27d4+nz54923fZ\nZZe0/ZeXl/vxxx+fNg3wJ554wt3du3btWiHeGTNmxCcj0fDEE0/4vHnzsn5mI2+++aYfc8wx8fSe\nPXs64M2aNfM//vGP8fTPPvuswjYeeOABP+igg9JibNy4sQP+3nvveZ8+ffycc87xtWvX+vLly715\n8+b+3e9+1/fdd1+H4ITqkksuccAHDRqUtu3169f7xx9/7H379nVIL6Ft2rQpjnnZsmUOwQnSL3/5\nS3cPStk//OEP076/1157rQO+atUqnzp1atrnKzrm+b7j0UkX4KWlpUoY1T1sjQnjhhtuyPpheu65\n5+LXRx11lN91111p8++55x5fsmSJb9iwwf/973/HH2D3oPgPwVl4lFhS13300UfTxseNG1fhiw+k\nnbVmDt///vfzfhky9xENUUkpGq6++moH/O23346PT2ryiRJG//794x+OfIO7+6WXXpo27ZVXXqnw\no9agQYMK+0gyXHTRRfHxST1DzBwOPvjg+PUHH3zgGzdu9KlTp/qee+7pzz//vC9evDjreocffnjW\n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\n23eAl5dGAwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc60a7f5ba8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot the result\n",
    "plt.plot(x_vals, y_vals, 'o', label='Data Points')\n",
    "plt.plot(x_vals, best_fit, 'r-', label='Best fit line', linewidth=3)\n",
    "plt.legend(loc='upper left')\n",
    "plt.title('Sepal Length vs Pedal Width')\n",
    "plt.xlabel('Pedal Width')\n",
    "plt.ylabel('Sepal Length')\n",
    "plt.show()\n",
    "\n",
    "# Plot loss over time\n",
    "plt.plot(loss_vec, 'k-')\n",
    "plt.title('Demming Loss per Generation')\n",
    "plt.xlabel('Iteration')\n",
    "plt.ylabel('Demming Loss')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
